package com.tech.mapper;

import com.tech.repository.entity.GoodsSort;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface GoodsSortDao {
	/**
	 * 通过ID查找商品分类
	 *
	 * @param sid 要查找商品分类的所属ID
	 * @return 找到就返回，否则返回null
	 */
	GoodsSort getGoodsSortBySid(int sid);

	/**
	 * 获取该商品分类的父商品分类
	 *
	 * @param sid 子商品分类ID
	 * @return 如果有就返回父商品分类，没有返回null
	 */
	GoodsSort getParentGoodsSortBySid(int sid);

	/**
	 * 获取所有一级分类
	 */
	@Select("select * from goodssort where parentid is null;")
	List<GoodsSort> getAllFirstSort();

	/**
	 * 获取该商品分类的子商品分类
	 *
	 * @param parentId 父商品分类ID
	 * @return 如果有就返回所有子商品分类，没有返回空列表
	 */
	@Select(" select * from goodssort where parentid = #{parentId} ")
	List<GoodsSort> getChildGoodsSortsBySid(@Param("parentId") int parentId);

	/**
	 * 通过一级分类名找到二级分类数据
	 *
	 * @param sortName 一级分类名
	 * @return 二级分类数据
	 */
	@Select("""
			select g.* from goodssort 
			left join goodssort g on g.parentid = goodssort.sid 
			where goodssort.ssortname = #{sortName} 
			and g.sid is not null;
			""")
	List<GoodsSort> getChildGoodsSortsByName(@Param("sortName") String sortName);

	/**
	 * 添加新的商品分类信息
	 *
	 * @param GoodsSort 新的商品分类信息
	 * @return 新商品分类所属ID
	 */
	int addGoodsSort(GoodsSort GoodsSort);

	/**
	 * 添加新的商品分类信息
	 *
	 * @param GoodsSortList 商品分类列表
	 * @return 影响的行数
	 */
	int[] addGoodsSorts(List<GoodsSort> GoodsSortList);

	/**
	 * 根据ID删除指定商品分类，如果是一级分类，就需要把其二级分类也删除掉
	 *
	 * @param sid 要删除商品分类的ID
	 * @return 是否删除成功，不存在时返回false
	 */
	boolean delGoodsSortBysid(int sid);

	/**
	 * 根据ID批量删除商品分类
	 *
	 * @param GoodsSortsList 要删除商品分类的ID列表
	 * @return 影响到的行数
	 */
	int[] delGoodsSorts(List<Integer> GoodsSortsList);
}
